//删除每个输入行的末尾的空格及制表符, 并删除完全是空格的行
#include <stdio.h>
#define MAXSIZE 1000

int getline(char s[], int lim);
int remove_blank(char s[]);

int main()
{
    int len;                //记录读取行的长度
    char line[MAXSIZE];

    while ((len = getline(line, MAXSIZE)) > 0)
    {
        if (remove_blank(line) > 0)
            printf("%s", line);
    }

    return 0;
}

//remove函数: 删除每个输入行的末尾的空格及制表符, 并删除完全是空格的行
//首先找到换行符
//从后面往前判断是否是空格或者制表符,如果最后得出的长度为0,则表示该行为空行,直接返回0即可
int remove_blank(char s[])
{
    int i, flag;

    i = 0;
    flag = 0;                           //如果该行不完全是空格,flag为1
    while(s[i] != '\n')
    {
        ++i;
    }
    --i;                                //将索引移到末尾
    while(i >= 0 && (s[i] == ' ' || s[i] == '\t'))
        --i;
    if (i >= 0)
    {
        ++i;
        s[i] = '\n';
        ++i;
        s[i] = '\0';
    }

    return (i - 1);
}

//getline函数:将输入的一行读取并返回其长度,只能读取前1000个字符,超出不读取但计算长度
int getline(char s[], int lim)
{
    int i, c, j;

    j = 0;
    for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
    {
        if(i < lim - 2)
            s[j++] = c;
    }
    if (c == '\n')
    {
        s[j] = '\n';
        ++j;
        ++i;
    }
    s[j] = '\0';
    return i;
}